package com.fredia.terp.util;

import org.apache.commons.lang.StringUtils;

/**
 * @author : wangyong
 * @since : 2017年6月27日
 * @version : v0.0.1
 */
public class RegexUtils {

	/**
	 * 用户名是否符合规范（^[\u4E00-\u9FA5A-Za-z0-9_]+$）
	 *
	 * @return
	 */
	public static boolean isValidUsername(String username) {
		if (StringUtils.isBlank(username)) {
			return false;
		}

		return username.matches("^[\u4E00-\u9FA5A-Za-z0-9_]{3,10}$");
	}

	/**
	 * 用户名是否符合规范（^[\u4E00-\u9FA5A-Za-z0-9_]+$）
	 *
	 * @return
	 */
	public static boolean isValidInteger(String money) {
		if (StringUtils.isBlank(money)) {
			return false;
		}

		return money.matches("/^[0-9]+\\d*$");
	}

	/**
	 * 密码是否符合规范（[a-zA-Z\d]{6,20}）
	 *
	 * @return
	 */
	public static boolean isValidPassword(String password) {
		if (null == password) {
			return false;
		}

		return password.matches("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$");
	}

	/**
	 * 是否有效手机号码
	 *
	 * @param mobileNum
	 * @return
	 */
	public static boolean isMobileNum(String mobileNum) {
		if (null == mobileNum) {
			return false;
		}

		// return
		// mobileNum.matches("^((13[0-9])|(14[4,7])|(15[^4,\\D])|(17[6-8])|(18[0-9]))(\\d{8})$");
		return mobileNum.matches("^1[0-9]{10}$");
	}

	/**
	 * 是否有效邮箱
	 *
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email) {
		if (null == email) {
			return false;
		}

		return email.matches("^([a-zA-Z0-9])+([a-zA-Z0-9_.-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");
	}

	/**
	 * 是否是QQ邮箱
	 */
	public static boolean isQQEmail(String email) {
		if (null == email)
			return false;

		return email.matches("^[\\s\\S]*@qq.com$");
	}

	/**
	 * 是否数字(小数||整数)
	 *
	 * @param number
	 * @return
	 */
	public static boolean isNumber(String number) {
		if (null == number) {
			return false;
		}

		return number.matches("^[+-]?(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d)+)?$");
	}

	/**
	 * 是否整数
	 *
	 * @param number
	 * @return
	 */
	public static boolean isInt(String number) {
		if (null == number) {
			return false;
		}

		return number.matches("^[+-]?(([1-9]{1}\\d*)|([0]{1}))$");
	}

	/**
	 * 是否正整数
	 *
	 * @param number
	 * @return
	 */
	public static boolean isPositiveInt(String number) {
		if (null == number) {
			return false;
		}

		return number.matches("^[+-]?(([1-9]{1}\\d*)|([0]{1}))$");
	}

	/**
	 * 是否日期yyyy-mm-dd(yyyy/mm/dd)
	 *
	 * @param date
	 * @return
	 */
	public static boolean isDate(String date) {
		if (null == date) {
			return false;
		}
		return date.matches("^([1-2]\\d{3})[\\/|\\-](0?[1-9]|10|11|12)[\\/|\\-]([1-2]?[0-9]|0[1-9]|30|31)$");
	}

	/**
	 * 逗号分隔的正则表达式
	 *
	 * @param str
	 * @return
	 */
	public static String getCommaSparatedRegex(String str) {
		if (str == null) {
			return null;
		}

		return "^(" + str + ")|([\\s\\S]*," + str + ")|(" + str + ",[\\s\\S]*)|([\\s\\S]*," + str + ",[\\s\\S]*)$";
	}

	/**
	 * 字符串包含
	 *
	 * @return
	 */
	public static boolean contains(String str, String regex) {
		if (str == null || regex == null) {
			return false;
		}

		return str.matches(regex);
	}

	/**
	 * 是否为16-22位银行账号
	 *
	 * @param bankAccount
	 * @return
	 */
	public static boolean isBankAccount(String bankAccount) {
		if (null == bankAccount) {
			return false;
		}

		return bankAccount.matches("^\\d{16,22}$");
	}

	/**
	 * 验证身份证号
	 *
	 * @param number
	 * @return
	 */
	public static boolean idCardNumber(String number) {
		String rgx = "^\\d{15}|^\\d{17}([0-9]|X|x)$";
		if (null == number) {
			return false;
		}
		return number.matches(rgx);
	}

	/**
	 * 验证交易密码格式
	 *
	 * @param number
	 * @return
	 */
	public static boolean isPayPassword(String pwd) {
		if (null == pwd) {
			return false;
		}
		return pwd.matches("^[0-9]{6}$");
	}
}
